#ifndef		_RT_AUDIO_H_

#define		_RT_AUDIO_H_

typedef struct
{
	/* main functions */
	AUDIOHANDLE		(*Open)			(AUDIOOPENPARAM* paop);
	BOOL			(*Close)		(AUDIOHANDLE handle);
	BOOL			(*CloseAll)		(void);
	BOOL			(*Seek)			(AUDIOHANDLE handle, long time, int whence);
	BOOL			(*Play)			(AUDIOHANDLE handle, AUDIOPLAYPARAM* papp);
	BOOL			(*Record)		(AUDIOHANDLE handle, AUDIORECORDPARAM* parp);
	BOOL			(*Pause)		(AUDIOHANDLE handle);
	BOOL			(*Resume)		(AUDIOHANDLE handle);
	BOOL			(*Stop)			(AUDIOHANDLE handle);
	long			(*Read)			(AUDIOHANDLE handle, void* buf, long length);
	long			(*Write)		(AUDIOHANDLE handle, const void* buf, long length);
	BOOL			(*GetStatus)	(AUDIOHANDLE handle, AUDIOSTATUS* pas);
	BOOL			(*GetMediaInfo)	(AUDIOHANDLE handle, MEDIAFILEINFO* pmfi);
	BOOL			(*SetCallBack)	(AUDIOHANDLE handle, int index, void* pfun);

	/* extended functions, lyric etc. */
	const LYRICTAG*	(*GetLyric)		(unsigned long* tag_cnt);

	/* audio driver functions */
	void			(*Mute)			(BOOL IsOn);
	void			(*SetVolume)	(int volume);
	int				(*GetVolume)	(void);
	void			(*SetEQ)		(int eq);
	int				(*GetEQ)		(void);

///////////////////////////////////////////////////////////////////////////////////////
//                              A U D I O  M I X E R                                 //
///////////////////////////////////////////////////////////////////////////////////////
	BOOL			(*MSourceOpen)	(MIXERSOURCE* pms);
	BOOL			(*MSourceClose)	(MIXERSOURCE* pms);
	BOOL			(*MOpen)		(MIXEROPENPARAM* pmop);
	BOOL			(*MSetChannel)	(int channel, MIXERSOURCE* pms, int loop, int flag);
	BOOL			(*MStart)		(void);
	BOOL			(*MStop)		(void);
	BOOL			(*MClose)		(void);

	void*			(*GetFavParam)	(void);

	void			(*SetChannel)	(int ch);
	int				(*GetChannel)	(void);

} T_Audio_RelocationTable;

#endif		// _RT_AUDIO_H_